package com.priox.sigar.application.grupoempresarial;


import com.mm.support.mapper.DTOMapperService;
import com.priox.sigar.application.mappers.GrupoEmpresarialMapper;
import com.priox.sigar.domain.model.GrupoEmpresarial;
import com.priox.sigar.domain.model.GrupoRepository;
import com.priox.sigar.server.infrastructure.persistence.exception.ApplicationException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Component
public class RegistroGrupoEmpresarialAppImpl implements RegistroGrupoEmpresarialApp {


    @Autowired
    DTOMapperService mapperService;

    @Autowired
    GrupoRepository grupoRepository;

    @Autowired
    GrupoEmpresarialMapper grupoEmpresarialMapper;


    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void save(GrupoEmpresarial grupoEmpresarial, boolean updateMode) {
        if (updateMode) {
            int cont = grupoEmpresarialMapper.grupoByNombre(grupoEmpresarial.getNombre());
            if (cont > 1) {
                throw new ApplicationException("El grupo '" + grupoEmpresarial.getNombre() + "' ya esta registrado");
            }
            grupoRepository.merge(grupoEmpresarial);
        } else {
            int cont = grupoEmpresarialMapper.grupoByNombre(grupoEmpresarial.getNombre());
            if (cont > 0) {
                throw new ApplicationException("El grupo '" + grupoEmpresarial.getNombre() + "' ya esta registrado");
            }
            grupoRepository.persist(grupoEmpresarial);
        }
    }



    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void delete(GrupoEmpresarial nuevoRegistro) {
        grupoRepository.remove(nuevoRegistro);
    }
}
